iT邦幫忙

2024 iThome 鐵人賽

DAY 7
0

前言

學會了git的策略後,我們要來學一下如何寫出好的軟體,那麼遵循12 Factor app可以幫助我們寫出品質比較好的軟體,今天我們就來一條一條的了解吧

The 12 Factor app根據官網描述

Who should read this document?

Any developer building applications which run as a service. Ops engineers who deploy or manage such applications.

基本上要上k8s的app都可以閱讀以及服用此方法XD

I. Codebase

One codebase tracked in revision control, many deploys

https://ithelp.ithome.com.tw/upload/images/20240919/201297022CiAkB1xLs.png
可以理解成我們有一個最上游的git repo,可以對各種不同情境做不同的部屬設定,例如我們的測試環境cpu以及memory,甚至是config可以調整成測試用的,而production則用較多的cpu等,這些都可以調整。
所有部屬的來源都是相同的,這樣可以維持部屬流程的簡化,因為只有一份code,我們可以針對不同需求做不同部屬的控管就可以了。

II. Dependencies

Explicitly declare and isolate dependencies

意思是我們的依賴套件都有明顯的展示出來,讓大家清楚我們依賴了什麼樣的模組,什麼樣的套件,例如nodejs開發我們會用npm來管理依賴關係。
這樣的優點是簡化了部屬環境流程,大家一看就知道這個app需要什麼東西,而不是讓部屬者通靈。

迷之音:我要成為通靈王!!

III. Config

Store config in the environment

The twelve-factor app stores config in environment variables (often shortened to env vars or env).
我們應該將config儲存在env裡面,這樣有甚麼好處呢,假設我們將app的設定跟code放在一起,那麼我們要改config時就需要更動我們的codebase,這代表著我們需要重新CICD,非常耗時浪費資源,如果隔離開來,使用環境變數的方式,就可以透過修改不同的環境變數,達到不同環境不同配置的效果,就可以只要重新CD不需要CI了。

甚至可以透過feature toggle的工具,連重新CD都不用。

IV. Backing services

Treat backing services as attached resources

https://ithelp.ithome.com.tw/upload/images/20240919/20129702xa8tK7K2uo.png
The code for a twelve-factor app makes no distinction between local and third party services.
這樣的方式,可以幫我們做設計上面的隔離,例如我們想要用不同DB的時候,因為他對系統來說是掛載的一份子,我們只要更改config來切換就可以了,不管使用哪一顆DB,對我們來說都是掛載的資源,完全不用動到code,就不需要重新CICD啦。

V. Build, release, run

Strictly separate build and run stages

https://ithelp.ithome.com.tw/upload/images/20240919/20129702388pPOsgjL.png

The twelve-factor app uses strict separation between the build, release, and run stages.

  • build的意思是將code轉換成可執行套件。
  • release是將config以及build出來的執行套件做結合。
  • run則是在執行環境運行app。
    這意思是將build,release,run三種情境分開,這樣可以分離開來可以提高我們的維護性。
    例如我們如果改code,這樣分離後,就不能允許我們在run階段的時候改,一定要重頭build->release->run,可以確保流程的安全,像是改code後我們要調config,也會再重走流程的時候去做調整。

VI. Processes

Execute the app as one or more stateless processes

Twelve-factor processes are stateless and share-nothing.
這樣的好處就是我們不管重啟動幾次app,我們的狀態永遠是對的,不用怕app遇到事故被重啟,引發錯誤事件。
無狀態也可以讓我們更好的擴充app的資源,因為每一個部屬的container都可以被視為一樣的,使用者不管打到哪一個container,做的事情都會是一樣的。

總結

今天我們認識了六種開發部屬方式,遵循這些會讓我們的軟體品質UpUp,明天我們繼續剩下的6種XD

reference

https://12factor.net/


上一篇
Day 6 Repository Strategy
下一篇
Day 8 The 12 Factor app (II)
系列文
Backend Developer的學習Roadmap12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言